<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>丢失原型链</title>
</head>
<body>

</body>
<script>
// 使用 JSON 序列化和反序列化会导致对象的原型链（prototype chain）丢失。
// 反序列化后的对象将是纯粹的普通对象 (Object)，不再继承自原始对象的原型。

// 例子：
    // 定义一个带有原型方法的构造函数
    function Person (name, age) {
        this.name = name
        this.age = age
    }
    Person.prototype.greet = function () {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
    // 创建一个 Person 对象实例
    const originalPerson = new Person("Alice", 30);
    originalPerson.greet();  // 输出: Hello, my name is Alice and I am 30 years old.
    // 使用 JSON 序列化和反序列化进行深拷贝
    const jsonString = JSON.stringify(originalPerson);
    const copiedPerson = JSON.parse(jsonString);

    // 检查原型链
    console.log(copiedPerson instanceof Person); // 输出: false

    // 尝试调用 greet 方法
    try {
        copiedPerson.greet();
    } catch (error) {
        console.log(error.message);  // 输出: copiedPerson.greet is not a function
    }
    // 查看拷贝后的对象内容
    console.log(copiedPerson);  // 输出: { name: 'Alice', age: 30 }

    // 过这个例子可以看到，使用 JSON 序列化和反序列化进行深拷贝时，拷贝后的对象会丢失原型链，导致原型方法无法使用。
    // 如果需要保留原型链和方法，建议使用其他深拷贝方法，例如递归拷贝或者使用专门的深拷贝库。
</script>
</html>